﻿using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Shpm.System.Db;
using Shpm.App.Commons.Db.Beans.Master;
using System.Collections;
using Shpm.App.Input.Bean;

/// <summary>
/// Summary description for MaterialRequisitionDao
/// </summary>
namespace Shpm.App.Input.Dao
{
    public class MaterialRequisitionDao : ShpmBaseDao
    {

        public MaterialRequisitionDao() { }


        // 从数据字典中取得画面列表项内容
        public const string FIND_BY_CATALOG = "CommonDictionary.FindByCatalog";

        //申领单列表
        public const string LIST_MATERIAL_REQUSITION = "MaterialRequsition.ListMaterialRequsition";

        //物资列表
        public const string LIST_MATERIAL_REQUSITION_DETAIL = "MaterialRequsition.ListMaterialRequsitionDetail";

        //申领单
        public const string LOAD_MATERIAL_REQUSITION = "MaterialRequsition.GetMaterialRequsition";

        //申领单数据写入
        public const string INSERT_MATERIAL_REQUSITION = "MaterialRequsition.InsRequsition";

        //申领单数据更新
        public const string UPD_MATERIAL_REQUSITION = "MaterialRequsition.UpdRequsition";

        //物资数据写入
        public const string INSERT_MATERIAL_REQUSITION_DETAIL = "MaterialRequsition.InsRequsitionDetail";

        //物资数据删除
        public const string DEL_MATERIAL_REQUSITION_DETAIL = "MaterialRequsition.DelRequsitionDetail";

        //申领单删除
        public const string DEL_MATERIAL_REQUSITION = "MaterialRequsition.DelRequsition";

        public const string REQUISITION_AUDITING_TYPE_WAIT = "0";   // 等待状态
        public const string REQUISITION_AUDITING_TYPE_PASS = "1";   // 通过状态
        public const string REQUISITION_AUDITING_TYPE_REJECT = "2"; // 拒绝状态
        public const string LIST_DEPARTMENT = "MaterialRequsition.ListDepartment";
        public const string GET_MATERIAL_REQUSITION = "MaterialRequsition.GetMaterialRequsition";
        public const string LIST_REQUSITION_DETAIL = "MaterialRequsition.ListRequsitionDetail";
        public const string LIST_REQUSITION_HISTORY = "MaterialRequsition.ListRequsitionHistory";
        public const string UPD_MATERIAL_REQUSITION_STAT = "MaterialRequsition.UpdMaterialRequsitionStat";
        public const string GET_EMPLOYEE = "CommonSearch.FindEmployee";
        public const string INS_REQUSITION_HISTORY = "MaterialRequsition.InsRequsitionHistory";

        public IList ListDepartment(MstDepartmentBean paramBean)
        {
            return base.QueryForList(LIST_DEPARTMENT, paramBean);
        }

        public MaterialRequsitionBean GetMaterialRequsition(MaterialRequsitionBean paramBean)
        {
            return (MaterialRequsitionBean)base.QueryForObject(GET_MATERIAL_REQUSITION, paramBean);
        }

        public IList ListRequsitionDetail(MaterialRequsitionDetailBean paramBean)
        {
            return base.QueryForList(LIST_REQUSITION_DETAIL, paramBean);
        }

        public IList ListRequsitionHistory(MaterialRequsitionHistoryBean paramBean)
        {
            return base.QueryForList(LIST_REQUSITION_HISTORY, paramBean);
        }

        public int UpdateRequsitionStat(MaterialRequsitionBean paramBean)
        {
            return base.Update(UPD_MATERIAL_REQUSITION_STAT, paramBean);
        }

        public MstEmployeeBean GetEmployee(MstEmployeeBean paramBean)
        {
            return (MstEmployeeBean)base.QueryForObject(GET_EMPLOYEE, paramBean);
        }

        public Object InsertRequsitionHistory(MaterialRequsitionHistoryBean paramBean)
        {
            return base.Insert(INS_REQUSITION_HISTORY, paramBean);
        }

        public void UpdateRequstionStat(MaterialRequsitionBean paramBean1, MaterialRequsitionHistoryBean paramBean2)
        {
            try
            {
                // 开始事务 
                base.BeginTransaction();

                this.UpdateRequsitionStat(paramBean1);

                this.InsertRequsitionHistory(paramBean2);

                // 提交事务
                base.CommitTransaction();

            }
            catch (Exception e)
            {
                // 回滚事务                
                base.RollBackTransaction();
                throw e;
            }
        }


        /*
         *名称： FindByCatalog
         *功能： 取得数据字典列表对象。
         *参数： paramBean - 检索参数
         *返回： 数据字典列表 
         *说明： 从数据字典中取得画面列表项内容
        */
        public IList FindByCatalog(CommonDictionaryBean paramBean)
        {
            return base.QueryForList(FIND_BY_CATALOG, paramBean);
        }

        /*
        *名称： LoadMaterialRequsition
        *功能： 取得申领单对象。
        *参数： paramBean - 检索参数
        *返回： 申领单对象 
        *说明： 从物资材料信息中取得画面申领单内容
       */
        public MaterialRequsitionBean LoadMaterialRequsition(MaterialRequsitionBean paramBean)
        {
            return (MaterialRequsitionBean)base.QueryForObject(LOAD_MATERIAL_REQUSITION, paramBean);
        }


        /*
         *名称： ListMaterialRequsition
         *功能： 取得物资申请列表对象。
         *参数： paramBean - 检索参数
         *返回： 数据字典列表 
         *说明： 
        */
        public IList ListMaterialRequsition(MaterialRequsitionBean paramBean)
        {
            return base.QueryForList(LIST_MATERIAL_REQUSITION, paramBean);
        }

        /*
         *名称： ListMaterialRequsitionDetail
         *功能： 取得申领物资单列表对象。
         *参数： paramBean - 检索参数
         *返回： 数据字典列表 
         *说明： 
        */
        public IList ListMaterialRequsitionDetail(MaterialRequsitionBean paramBean)
        {
            return base.QueryForList(LIST_MATERIAL_REQUSITION_DETAIL, paramBean);
        }

        /*
        *名称： InserttMaterialRequsition
        *功能： 保存物资申请列表对象。
        *参数： paramBean - 检索参数
        *返回： 数据字典列表 
        *说明： 
       */
        public object InsertMaterialRequsition(MaterialRequsitionBean paramBean)
        {
            return base.Insert(INSERT_MATERIAL_REQUSITION, paramBean);
        }

        /*
       *名称： InserttMaterialRequsition
       *功能： 更新物资申请列表对象。
       *参数： paramBean - 检索参数
       *返回： 数据字典列表 
       *说明： 
      */
        public int UpdMaterialRequsition(MaterialRequsitionBean paramBean)
        {
            return base.Update(UPD_MATERIAL_REQUSITION, paramBean);
        }

        /*
       *名称： InserttMaterialRequsitionDetail
       *功能： 保存物资清单对象。
       *参数： paramBean - 检索参数
       *返回： 数据字典列表 
       *说明： 
      */
        public object InsertMaterialRequsitionDetail(MaterialRequsitionDetailBean paramBean)
        {
            return base.Insert(INSERT_MATERIAL_REQUSITION_DETAIL, paramBean);
        }

        /*
       *名称： DelMaterialRequsitionDetail
       *功能： 删除物资清单对象。
       *参数： paramBean - 检索参数
       *返回： 数据字典列表 
       *说明： 
      */
        public int DelMaterialRequsitionDetail(MaterialRequsitionBean paramBean)
        {
            return base.Delete(DEL_MATERIAL_REQUSITION_DETAIL, paramBean);
        }


        /*
      *名称： Insert
      *功能： 数据写入操作。
      *参数： paramBean - 检索参数；list-物资列表
      *返回：
      *说明： 
     */
        public void Insert(MaterialRequsitionBean paramBean,IList list) 
        {
            try 
            {
                base.BeginTransaction();

                int requsitionId = (int)InsertMaterialRequsition(paramBean);

                MaterialRequsitionDetailBean bean = null;
                for (int i = 0; i < list.Count;i++ )
                {
                    bean = (MaterialRequsitionDetailBean)list[i];
                    bean.RequisitiobnId = requsitionId;
                    bean.UserId = paramBean.UserId;
                    InsertMaterialRequsitionDetail(bean);
                }
                base.CommitTransaction();
            }
            catch (Exception e)
            {
                //log.Fatal(e);
                base.RollBackTransaction();
                throw new DataAccessException(e);
            }
        }

        /*
     *名称： Update
     *功能： 数据更新操作。
     *参数： paramBean - 检索参数；list-物资列表
     *返回：
     *说明： 
    */
        public void Update(MaterialRequsitionBean paramBean, IList list)
        {
             try 
            {
                base.BeginTransaction();
                 //更新申领单
                UpdMaterialRequsition(paramBean);

                 //删除原有物资列表
                DelMaterialRequsitionDetail(paramBean);


                //写入物资列表数据
                MaterialRequsitionDetailBean bean = null;
                for (int i = 0; i < list.Count; i++)
                {
                    bean = (MaterialRequsitionDetailBean)list[i];
                    bean.RequisitiobnId = paramBean.RequisitiobnId;
                    bean.UserId = paramBean.UserId;
                    InsertMaterialRequsitionDetail(bean);
                }

                base.CommitTransaction();
            }
            catch (Exception e)
            {
                //log.Fatal(e);
                base.RollBackTransaction();
                throw new DataAccessException(e);
            }
        }

        public int Delete(MaterialRequsitionBean bean)
        {
            return base.Delete(DEL_MATERIAL_REQUSITION, bean);
        }
    }
}